Figura 3
Questo progetto fa uso della porta parallela
Spp, se non la conoscete o avete qualche difficolta' fate riferimento al
tutorial sulla
Spp.
Per impratichirvi ulteriormente date un occhiata al
progetto Sppboard.
Cerchero' in poche parole di spiegare il progetto, in realta' non troppo
complesso, il cui schema elettrico e' raffigurato in Figura 3.
Lo schema
e' stato disegnato a moduli, per comodita' e per semplicita', in realta' tutto
e' stato collegato e realizzato su una basetta mille fori.
Il
convertitore adc0808 e' un convertitore analogico digitale a 8 canali uP
compatibile. Si presenta sottoforma di un chip a 28 pin, di questi 28 pin 3, a b
e c, sono riservati all'indirizzamento interno. Con 3 bit si riescono a
decodificare 8 canali diversi, ecco che questi pin andranno collegati a 3 linee
della porta parallela Spp per la decodifica. Le linee scelte sono a : /autofeed
(pin14 e bit c1 del Control register), b : initialize (pin 16 e bit c2 del
Control register) e c : /select in (pin 17 e bit c3 del Control register).
Attraverso il data bus in uscita dal convertitore ci collegheremo alla
parallela, tramite un multiplexer quadruplo da 2 a 1 linea, ai pin di ingresso
della porta parallela.
Il multiplexer ha il compito di consentire una lettura
di 1 byte avendo a disposizione solo 4 bit in input verso la
parallela.
Tramite il segnale /strobe (pin 1 e bit c0 del Control register)
andiamo a selezionare dapprima il nibble piu' basso e poi il nibble piu'
alto.
Le linee di input scelte sulla parallela sono : /error (pin 15 e bit s3
dello Status register), select (pin 13 e bit s4 dello Status register), pe (pin
12 e bit s5 dello Stetus register) e busy (pin 11 e bit s7 dello Status
register).
Per quanto riguarda le operazioni di inizio conversione, fine
conversione e output enable ho collegato il d0 (pin 2 e bit d0 del Data
register) allo Start e Ale dell'adc0808, il d1 (pin 3 e bit d1 del Data
register) all'Output enable e /ack (pin 10 i bit s6 dello Status register)
all'End of conversion negato dell'adc0808.
Quest'ultima connessione serve per
gestire la fine conversione mandando un eventuale interrupt sulla porta
parallela del pc.
Il segnale di clock viene generato da un ne555
configurato come multivibratore astabile ad una frequenza di circa 588 Khz,
valore all'interno delle specifiche di clock del convertitore. Tramite
ponticellatura e' possibile introdurre un clock esterno (utile per applicazioni
sincrone con schede a uControllori)
Tutti i segnali logici di pilotaggio
e di uscita del progetto, oltre ad essere stati connessi opportunamente ad un
connettore cannon db25 maschio, sono stati anche riportati su un connettore a
pettine per permettere l'utilizzo della scheda in oggetto con un uControllore.
(Ad esempio un Pic).
Per quanto riguarda la parte analogica del progetto
e' stato utilizzato un regolatore 7805 per generare la tensione di alimentazione
di 5 volt per gli integrati, a partire dai 9 volt di alimentazione della
scheda.
Non ho alimentato direttamente a 5V perche' il convertitore vuole una
Vref di 5V per cui era indispensabile avere una Vcc piu' alta dalla quale
ottenere questa Vref.
La Vref e' stata quindi ottenuta da un Lm336 5.0V
e trimmer multigiri, disaccoppiato tramite un inseguitore di tensione realizzato
con operazionale lm358.
Gli 8 canali analogici in ingresso vengono
connessi tramite una morsettiera. E' importante che i segnali da convertire
vengano portati alla morsettiera attraverso dei cavi schermati.
Ho realizzato alcuni programmi in ambiente dos, con compilatore
Turbo C Borland che presento qui di seguito. Per ognuno trovate il tipo di
schermata, il sorgente e l'eseguibile.
Questi 3 programmi includono una libreria, la
spp.h.
La ver 2.0 prevede la possibilita' di
selezionare il canale attraverso i tasti funzione f1..f8 e di andare in stand by
mode attraverso f9. Si esce con esc.
Il canale selezionato viene evidenziato
con la scritta adc sotto alla misura.
Per ogni canale si aprono finestre in
senso orizzontale.
La ver 2.7 e' uguale alle 2.0 a parte che per il
canale selezionato che viene evidenziato con una freccetta a fianco del
canale.
Per ogni canale si aprono finestre in senso verticale.
La ver
3.0 e' uguale alle 2.7 ma in piu' ha la possibilita' di salvare la misura su un
logfile (su cui viene scritta la tensione misurata, ora e data), premendo f10
ogniqualvolta si ha la necessita' di loggare la misura di un canale.
Basta
che quel canale sia stato preventivamente selezionato.
Chiedo scusa se i
sorgenti non sono ben commentati e mezzi in inglese.
Gestione Adc attraverso internet.
Per questa scheda ho realizzato un applicazione cgi che permette
di convertire gli 8 canali analogici in maniera remota, con la scheda adc
collegata alla porta parallela del server e ricevendo il risultato della
conversione sul browser di un pc client.
E' abbastanza interessante avere un
sistema del genere, in questo modo io posso leggere lo stato di sensori,
trasduttori, ecc. ecc. via internet, in qualunque posto del mondo io mi
trovi.
Di seguito lo schema a blocchi del sistema descritto, gia' visto
peraltro nella sezione cgi.
Per la scelta del canale da convertire ho utilizzato il seguente
form di cui allego anche il sorgente html.
Con i radio button si sceglie il canale da convertire, con il
tasto Converti si esegue la conversione e si riceve sul browser una
pagina
di questo tipo.
siccome ogni misura effettuata viene salvata su logfile,
con data e ora, c'e' la possibilita' di visualizzare questo logfile scegliendo
il canale e premendo Logfile. L'output che si ottiene e' una
pagina
di questo tipo. A questo proposito c'e' da dire che viene anche generato,
per ogni canale, un secondo logfile, analogo al primo, solo che al posto di data
e ora viene salvato il numero di secondi trascorsi dal 01/01/1970 a
quell'istante. Ricavato il punto zero questo tipo di logfile puo' essere utile
per darlo in pasto ad un foglio elettronico, tipo excel, e realizzare dei
grafici.
Di seguito riporto i moduli sorgente del cgi in oggetto, il
progetto e' stato realizzato in ambiente lccwin-32.
Per concludere riporto di seguito un grafico ottenuto con excel
che sulle ordinate riporta il valore di tensione letto (in millivolt) ed in
ascissa l'orario di ciascuna lettura.
Questa tabella e' stata ottenuta salvando una pagina di excel
come html ed sportando l'immagine. Si potranno ovviamente realizzare tanti altri
formati di grafico nonche' inserire delle etichette con i valori della tensione
convertita su ogni colonna dell'istogramma.